package com.ccjq.shosestore.shoppingcart.dao;

import com.ccjq.shosestore.shoppingcart.model.SaveCartModel;
import com.ccjq.shosestore.shoppingcart.model.ShowCartModel;

import java.sql.SQLException;
import java.util.List;

/**
 * 购物车的CRUD接口
 * 
 * @author 李佳鑫
 * */

public interface ShoppingCartDao {
	
	
	/**
	 * 向购物车中插入要添加的商品ID 商品数量  用户ID(从Model层的SaveCartModel模型中得到)
	 * 
	 * @param saveCartModel 要添加购物车数据的模型
	 * @return 受影响的行数
	 * */
	int addCart(SaveCartModel saveCartModel);
	
	/**
	 * 通过用户ID  查出购物车界面要展示的商品信息   (T_PRODUCT和T_SHOPPING_CART连表查询)
	 * 
	 * @param userId 用户ID
	 * @return 购物车商品的集
	 * */
	List<ShowCartModel> queryCartById(String userId);
	
	/**
	 * 通过的购物车Id  删除指定的商品 
	 * 
	 * @param shoppingCartId 购物车ID
	 * @return 受影响的行数
	 * */
	int delCartById(String shoppingCartId);
	
	/**
	 * 更新购物车数量的操作   通过购物车ID 和  获取到的文本框中的值
	 * 
	 * @param  quantity 更新后的数量
	 * 		   shoppingCartId 购物车ID
	 * @return 受影响的行数
	 * */
	int updateCartById(int quantity, String shoppingCartId);
	
	/**
	 * 通过商品ID 查询商品库存量  目的是和要结算的商品数量比较，
	 * 只能在库存量大于要添加的数量才可以执行结算
	 * 
	 * @param productId 商品ID
	 * @return 商品库存量
	 * 
	 * */
	int queryStockById(String productId);
		 
	/**
	 * 提交订单时通过商品ID和提交的商品数量   修改商品库存
	 * 
	 * @param quantity 要购买的商品数量
	 * 		  productId 商品ID
	 * @return 受影响的行数
	 * @exception SQLException 选择抛出异常 然后进行事务回滚
	 * */
	 int updateStockById(int quantity, String productId)throws SQLException;
	 
	/**
	 * 通过用户ID 清空购物车
	 * 
	 * @param userId 用户ID
	 * @return 受影响的 行数
	 * @exception SQLException 选择抛出异常  然后执行事务回滚
	 * */
	int emptyCart(String userId)throws SQLException;
	
	
	/**
	 * 通过用户ID 查询购物车中商品总价  用于展示在页面的总价位置
	 * 
	 * @param userId 用户ID
	 * @return 购物车商品总价
	 * */
	double queryTotal(String userId);
	
	/**
	 * 通过商品ID和用户ID 查询用户的购物车中是否添加过此商品
	 * 如果添加过就在原数量的的基础上进行添加，否则就新建购物车信息
	 * 
	 * @param productId 商品ID
	 * 		  userId    用户ID
	 * @return 购物车ID 用来判断购物车中是否已经存在该商品
	 * */
	String queryProductById(String productId, String userId);
}
